/**
 * @param {number} n
 * @return {string[]}
 */
// 深度优先过程是一个先后顺序，如果右括号数量大于左括号不管后面怎么添加都不可能生成答案
// 所以在深度优先过程中应该保证左括号的数量不小于右括号，并且左括号的数量不大于n
// 一但大于n，该括号一定无效
var generateParenthesis = function(n) {
  let ans = []
  const dfs = (paths, left, right) => {
    if(left > n || right > left) return // 
    if(paths.length === 2 * n) {
      ans.push(paths)
      return
    }
    dfs(paths + '(', left + 1, right)
    dfs(paths + ')', left, right + 1)
  }
  dfs('')
  return ans
};